<?php

/**
 * This is the model class for table "Usuario".
 *
 * The followings are the available columns in table 'Usuario':
 * @property integer $ID_USUARIO
 * @property string $TX_NOME
 * @property integer $ID_PERFIL
 * @property string $TX_EMAIL
 * @property string $TX_SENHA
 * @property integer $ID_SITUACAO
 * @property string $TX_CODIGO_ATIVACAO
 */
class Usuario extends CActiveRecord {
    
    const dominioInf = "@inf.ufrgs.br";
    public $senha;
    public $confirmaSenha;
    /**
     * Returns the static model of the specified AR class.
     * @return Usuario the static model class
     */
    public static function model($className=__CLASS__) {
        return parent::model($className);
    }

    /**
     * @return string the associated database table name
     */
    public function tableName() {
        return 'Usuario';
    }

    /**
     * @return array validation rules for model attributes.
     */
    public function rules() {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            array('TX_NOME, ID_PERFIL, TX_EMAIL, TX_SENHA, ID_SITUACAO', 'required'),
            array('ID_PERFIL', 'numerical', 'integerOnly' => true),
            array('TX_NOME', 'length', 'max' => 80),
            array('TX_EMAIL, TX_SENHA', 'length', 'max' => 50),
            array('senha', 'compare', 'compareAttribute'=>'confirmaSenha'),
            // The following rule is used by search().
            // Please remove those attributes that should not be searched.
            array(
                'TX_NOME,
                    ID_PERFIL,
                    TX_EMAIL,
                    ID_SITUACAO,
                    situacao,
                    perfil',
                'safe', 'on' => 'search'),
        );
    }

    /**
     * @return array relational rules.
     */
    public function relations() {
        // NOTE: you may need to adjust the relation name and the related
        // class name for the relations automatically generated below.
        return array(
            'alocacaos' => array(self::HAS_MANY, 'Alocacao', 'ID_USUARIO'),
            'iD_PERFIL' => array(self::BELONGS_TO, 'Perfil_Usuario', 'ID_PERFIL'),
            'iD_SITUACAO' => array(self::BELONGS_TO, 'Situacao_Usuario', 'ID_SITUACAO'),
        );
    }

    /**
     * @return array customized attribute labels (name=>label)
     */
    public function attributeLabels() {
        return array(
            'ID_USUARIO' => 'Id Usuario',
            'TX_NOME' => 'Nome',
            'ID_PERFIL' => 'Perfil',
            'TX_EMAIL' => 'E-mail',
            'TX_SENHA' => 'Senha',
            'ID_SITUACAO' => 'Situação',
            'TX_CODIGO_ATIVACAO' => 'Código de Ativação',
            'situacao' => 'Situação',
            'perfil' => 'Perfil',
            'senha' => 'Nova Senha',
            'confirmaSenha' => 'Confirmar Senha',
        );
    }

    /**
     * Retrieves a list of models based on the current search/filter conditions.
     * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions.
     */
    public function search() {
        // Warning: Please modify the following code to remove attributes that
        // should not be searched.

        $criteria = new CDbCriteria;

        $criteria->with = array('iD_PERFIL', 'iD_SITUACAO');

        //$criteria->compare('ID_USUARIO',$this->ID_USUARIO);

        $criteria->compare('TX_NOME', $this->TX_NOME, true);
        
        if ($this->ID_PERFIL != -1){
            $criteria->compare('iD_PERFIL.TX_DESCRICAO',$this->getPerfil());
        }

        $criteria->compare('TX_EMAIL', $this->TX_EMAIL, true);

        //$criteria->compare('TX_SENHA',$this->TX_SENHA,true);
        
        if ($this->ID_SITUACAO != -1){
            $criteria->compare('iD_SITUACAO.TX_DESCRICAO', $this->getSituacao());
        }
        
        
        
        $sort = new CSort();
        $sort->attributes = array(
            'defaultOrder' => 't.TX_NOME ASC',
            'ID_PERFIL' => array(
                'asc' => 'iD_PERFIL.TX_DESCRICAO asc',
                'desc' => 'iD_PERFIL.TX_DESCRICAO desc',
            ),
            'TX_EMAIL' => array(
                'asc' => 't.TX_EMAIL asc',
                'desc' => 't.TX_EMAIL desc',
            ),
            'ID_SITUACAO' => array(
                'asc' => 'iD_SITUACAO.TX_DESCRICAO asc',
                'desc' => 'iD_SITUACAO.TX_DESCRICAO desc',
            ),
        );
        
        return new CActiveDataProvider('Usuario', array(
            'criteria' => $criteria,
            'sort' => $sort
        ));
    }

    public function getPerfis() {
        $perfil_usuario = new Perfil_Usuario;
        $dataprovider = $perfil_usuario->search();
        $dados = $dataprovider->getData();
        $max = $dataprovider->getItemCount();
        $ret = array();
        for ($i = 0; $i < $max; $i++) {
            $ret += array($dados[$i]['ID_PERFIL'] => $dados[$i]['TX_DESCRICAO']);
        }
        
        return $ret;
    }
    
    public function getSituacoes($isPesquisa) {
        $situacao_usuario = new Situacao_Usuario();
        $dataprovider = $situacao_usuario->search();
        $dados = $dataprovider->getData();
        $max = $dataprovider->getItemCount();
        $ret = array();
        for ($i = 0; $i < $max; $i++) {
            if ($isPesquisa == false){
                if($dados[$i]['ID_SITUACAO'] == Situacao_Usuario::EMAIL_NAO_CONFIRMADO){
                    continue;
                }
            }
            $ret += array($dados[$i]['ID_SITUACAO'] => $dados[$i]['TX_DESCRICAO']);
        }
        
        return $ret;
    }
    
    public function getUsuarios() {
        $usuario = new Usuario();
        $dataprovider = $usuario->search();
        $dados = $dataprovider->getData();
        $max = $dataprovider->getItemCount();
        $ret = array();
        for ($i = 0; $i < $max; $i++) {
            $ret += array($dados[$i]['ID_USUARIO'] => $dados[$i]['TX_NOME']);
        }
        
        return $ret;
    }

    public function getEmailComDominio($email){
        $mail = explode("@", $email);
        return $mail[0] . Usuario::dominioInf;
    }
    
    public function getEmailSemDominio($email){
        $mail = explode("@", $email);
        return $mail[0];
    }
    
    private $_situacao = null;

    public function getSituacao() {
        if ($this->_situacao === null && $this->iD_SITUACAO !== null) {
            $this->_situacao = $this->iD_SITUACAO->TX_DESCRICAO;
        }
        return $this->_situacao;
    }

    public function setSituacao($value) {
        $this->_situacao = $value;
    }
    
    private $_perfil = null;

    public function getPerfil() {
        if ($this->_perfil === null && $this->iD_PERFIL !== null) {
            $this->_perfil = $this->iD_PERFIL->TX_DESCRICAO;
        }
        return $this->_perfil;
    }

    public function setPerfil($value) {
        $this->_perfil = $value;
    }
}